import simplegui, math, random

# isometric game
# to do
# add some interactivity



text_box_list = []
narrative = ['...Coming Soon', 'An outcast in his own land...', 'Forced to wander Spamriel...', 'Yeah thats right - Spamriel', "What's wrong with Spamriel?"]
WIDTH = 700
HEIGHT = 500

class TextBox:
    def __init__(self, width, pos, text, text_color, color1, color2):
        self.active = True
        self.pos = pos
        self.line_length = (width / 20)
        self.line_height = 30
        self.frame = 0
        self.color1 = color1.output() if type(color1) == Color else color1
        self.color2 = color2.output() if type(color2) == Color else color2
        self.text_color = text_color.output() if type(text_color) == Color else text_color
        self.not_done = True
        self.text_lines = []
        self.lines = 0
        while self.not_done:
            if len(text) <= self.line_length:
                self.text_lines.append(text)
                self.lines += 1
                self.not_done = False 
            else:
                for num in range(len(text)):
                    index = len(text) - num - 1
                    if index <= self.line_length and text[index] == " ":
                        self.text_lines.append(text[:index])
                        self.lines += 1
                        text = text[index+1:]
                        break
        self.size = [width, self.line_height * (self.lines + 1)]

    def draw(self, canvas):    
        if self.active:
            if self.frame <= 20:
                p1 = [self.pos[0] - self.frame * (self.size[0] / 2) / 20,
                      self.pos[1] - self.frame * (self.size[1] / 2) / 20]
                p2 = [self.pos[0] + self.frame * (self.size[0] / 2) / 20,
                      self.pos[1] - self.frame * (self.size[1] / 2) / 20]
                p3 = [self.pos[0] + self.frame * (self.size[0] / 2) / 20,
                      self.pos[1] + self.frame * (self.size[1] / 2) / 20]
                p4 = [self.pos[0] - self.frame * (self.size[0] / 2) / 20,
                      self.pos[1] + self.frame * (self.size[1] / 2) / 20]
                canvas.draw_polygon([p1, p2, p3, p4], 5, self.color1, self.color2)       
            else:
                canvas.draw_polygon([[self.pos[0] - self.size[0] / 2, self.pos[1] - self.size[1] / 2], [self.pos[0] + self.size[0] / 2, self.pos[1] - self.size[1] / 2], [self.pos[0] + self.size[0] / 2, self.pos[1] + self.size[1] / 2], [self.pos[0] - self.size[0] / 2, self.pos[1] + self.size[1] / 2]], 5, self.color1, self.color2)
                for line in range(self.lines):
                    canvas.draw_text(self.text_lines[line], [self.pos[0] + 5 - self.size[0] / 2, self.pos[1] + self.line_height * (line + 1) - self.size[1] / 2], 32, self.text_color, 'monospace')
                if (self.frame / 10) % 2 == 0:
                    point = [self.pos[0] + self.size[0] / 2 - 20, self.pos[1] + self.size[1] / 2 - 10]
                    canvas.draw_line(point, [point[0] - 10, point[1] - 10], 5, 'Blue')
                    canvas.draw_line(point, [point[0] + 10, point[1] - 10], 5, 'Blue')
        else:
            text_box_list.remove(self)          
        self.frame += 1

class Color:
    '''
    a class for colors
    I think i'll set up color constants here
    basically you can manipulate rgba 
    and output something CS likes
    with thanks to Gavin Shiels on the 
    discussion board
    '''
    def __init__(self, r, g, b, a = 1):
        self.r = r
        self.g = g
        self.b = b
        self.a = a

    def output(self):
        return 'rgba(%s,%s,%s,%s)' % (self.r, self.g, self.b, self.a)

class Sprite:
    def __init__(self, image, size, cart = [0, 0], displacement = [0, 0], center = None):
        self.image = image
        self.size = size
        if center == None:
            self.center = [size[0] / 2, size[1] / 2]
        else:
            self.center = center
        self.displacement = displacement
        self.cart = cart

    def iso2screen(self, pos):
        return [(2.0 * pos[1] + pos[0]) / 2, (2.0 * pos[1] - pos[0]) / 2]

    def cart2iso(self, pos):
        return [pos[0] - pos[1], (pos[0] + pos[1]) / 2.0]
         
    def __cmp__(self, other):
        if self.cart[1] == other.cart[1]:
            if self.cart[0] == other.cart[0]:
                return 0
            else:
                return self.cart[0] - other.cart[0]
        else:
            return self.cart[1] - other.cart[1]

    def draw(self, canvas, pos = None):
        canvas.draw_image(self.image, self.center, self.size, [pos[0] - self.displacement[0] * Var.scale, pos[1] - self.displacement[1] * Var.scale], [self.size[0] * Var.scale, self.size[1] * Var.scale]) 



class Var:
    '''
    this is a class set up to hold variables and static methods
    for translating between cartesian coords, isometric
    coords and the screen cart <--> iso <--> screen
    and holding all the sprites
    '''
    # Sprites
    village_maps = [
                   [
                    
     # background layer
    [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0], 
    [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0], 
    [0,0,6,7,8,7,8,7,6,7,6,6,7,8,7,8,7,6,7,6,6,7,8,7,8,7,6,7,6,6,7,8,7,8,7,6,7,6,6,7,8,7,8,7,6,7,6,6,7,8,7,8,7,6,0,0], 
    [0,0,7,8,6,7,8,7,8,7,6,7,8,6,7,8,7,8,7,6,7,8,6,7,8,7,8,7,6,7,8,6,7,8,7,8,7,6,7,8,6,7,8,7,8,7,6,7,8,6,7,8,7,8,0,0], 
    [0,0,7,6,7,6,7,8,8,6,7,7,6,7,6,7,8,8,6,7,7,6,7,6,7,8,8,6,7,7,6,7,6,7,8,8,6,7,7,6,7,6,7,8,8,6,7,7,6,7,6,7,8,8,0,0], 
    [0,0,8,6,7,8,7,8,6,8,7,8,6,7,8,7,8,6,8,7,8,6,7,8,7,8,6,8,7,8,6,7,8,7,8,6,8,7,8,6,7,8,7,8,6,8,7,8,6,7,8,7,8,6,0,0], 
    [0,0,8,7,8,6,7,8,6,6,7,8,7,8,6,7,8,6,6,7,8,7,8,6,7,8,6,6,7,8,7,8,6,7,8,6,6,7,8,7,8,6,7,8,6,6,7,8,7,8,6,7,8,6,0,0], 
    [0,0,6,7,6,7,6,7,7,7,8,6,7,6,7,6,7,7,7,8,6,7,6,7,6,7,7,7,8,6,7,6,7,6,7,7,7,8,6,7,6,7,6,7,7,7,8,6,7,6,7,6,7,7,0,0], 
    [0,0,8,8,7,6,7,6,7,7,6,8,8,7,6,7,6,7,7,6,8,8,7,6,7,6,7,7,6,8,8,7,6,7,6,7,7,6,8,8,7,6,7,6,7,7,6,8,8,7,6,7,6,7,0,0], 
    [0,0,7,8,7,8,7,6,7,8,7,6,6,6,4,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,5,8,6,8,6,8,7,7,8,7,0,0], 
    [0,0,8,7,8,8,6,7,8,7,6,7,7,6,19,9,10,11,9,10,11,9,10,11,9,10,9,10,11,11,9,10,11,9,10,11,9,10,11,9,9,10,11,9,12,6,7,6,7,6,7,8,6,7,0,0], 
    [0,0,6,8,7,8,7,6,6,7,7,6,7,7,19,10,11,9,10,11,9,10,11,9,10,11,10,11,9,9,10,11,9,10,11,9,10,11,9,10,10,11,9,10,12,7,6,7,6,7,8,8,7,6,0,0], 
    [0,0,7,6,7,8,7,8,7,6,7,8,6,6,19,11,9,10,11,9,10,11,9,10,11,9,11,9,10,10,11,9,10,11,9,10,11,9,10,11,11,9,10,11,12,7,8,7,8,7,7,8,7,8,0,0], 
    [0,0,6,7,6,7,8,8,6,7,8,8,7,8,19,9,10,11,9,10,11,9,10,11,9,10,9,10,11,11,9,10,11,9,10,11,9,10,11,9,9,10,11,9,12,8,8,6,8,6,7,8,7,6,0,0], 
    [0,0,7,6,7,8,7,8,8,7,7,8,7,8,19,10,11,9,10,11,9,10,11,9,10,11,10,11,9,9,10,11,9,10,11,9,10,11,9,10,10,11,9,10,12,7,8,7,8,7,8,7,6,7,0,0], 
    [0,0,7,7,8,7,8,7,6,7,6,7,7,6,19,11,9,10,11,9,10,11,9,10,11,9,11,9,10,10,11,9,10,11,9,10,11,9,10,11,11,9,10,11,12,7,8,7,8,7,6,7,7,6,0,0], 
    [0,0,8,7,6,8,7,6,7,7,7,6,7,6,19,9,10,11,9,10,11,9,10,11,9,10,9,10,11,11,9,10,11,9,10,11,9,10,11,9,9,10,11,9,12,6,7,8,7,8,7,6,7,8,0,0], 
    [0,0,8,8,7,6,7,7,6,7,7,8,7,6,19,10,11,9,10,11,9,10,11,9,10,11,10,11,9,9,10,11,9,10,11,9,10,11,9,10,10,11,9,10,12,7,8,7,8,7,6,7,8,8,0,0], 
    [0,0,6,8,7,7,6,7,8,6,8,8,6,7,19,11,9,10,11,9,10,11,9,10,11,9,11,9,10,10,11,9,10,11,9,10,11,9,10,11,11,9,10,11,12,8,6,7,6,7,8,7,7,8,0,0], 
    [0,0,6,7,8,6,7,8,8,7,6,7,7,6,1,16,16,16,16,16,16,16,16,16,16,16,16,18,11,9,10,17,16,16,16,16,16,16,16,16,16,16,16,16,3,8,6,8,6,8,7,7,8,7,0,0], 
    [0,0,7,8,6,8,7,7,8,7,7,8,6,8,7,7,8,7,7,8,6,8,7,7,8,7,8,19,9,10,11,12,7,8,6,8,7,7,8,7,6,8,7,7,8,7,7,6,7,6,7,8,6,7,0,0], 
    [0,0,7,6,7,6,7,8,6,7,7,6,7,6,7,8,6,7,7,6,7,6,7,8,6,7,6,19,10,11,9,12,7,6,7,6,7,8,6,7,7,6,7,8,6,7,6,7,6,7,8,8,7,6,0,0], 
    [0,0,8,7,6,7,8,8,7,6,8,7,6,7,8,8,7,6,8,7,6,7,8,8,7,6,7,19,11,9,10,12,8,7,6,7,8,8,7,6,6,7,8,8,7,6,8,7,8,7,7,8,7,8,0,0], 
    [0,0,8,7,8,7,7,8,7,8,8,7,8,7,7,8,7,8,8,7,8,7,7,8,7,8,7,19,9,10,11,12,8,7,8,7,7,8,7,8,8,7,7,8,7,8,8,6,8,6,7,8,7,6,0,0], 
    [0,0,7,8,8,6,7,8,7,6,7,8,8,6,7,8,7,6,7,8,8,6,7,8,7,6,7,19,10,11,9,12,7,8,8,6,7,8,7,6,8,6,7,8,7,6,8,7,8,7,8,7,6,7,0,0], 
    [0,0,8,7,8,7,8,7,6,7,8,7,8,7,8,7,6,7,8,7,8,7,8,7,6,7,6,19,11,9,10,12,8,7,8,7,8,7,6,7,8,7,8,7,6,7,8,7,8,7,6,7,7,6,0,0], 
    [0,0,6,7,8,7,6,7,7,6,6,7,8,7,6,7,7,6,6,7,8,7,6,7,7,6,7,19,9,10,11,12,6,7,8,7,6,7,7,6,8,7,6,7,7,6,7,8,7,8,7,6,7,8,0,0], 
    [0,0,7,6,7,8,7,6,7,8,7,6,7,8,7,6,7,8,7,6,7,8,7,6,7,8,7,19,10,11,9,12,7,6,7,8,7,6,7,8,7,8,7,6,7,8,8,7,8,7,6,7,8,8,0,0], 
    [0,0,6,7,8,7,6,7,8,8,6,7,8,7,6,7,8,8,6,7,8,7,6,7,8,8,8,19,11,9,10,12,6,7,8,7,6,7,8,8,8,7,6,7,8,8,6,7,6,7,8,7,7,8,0,0], 
    [0,0,7,8,6,7,8,7,7,8,7,8,6,7,8,7,7,8,7,8,6,7,8,7,7,8,7,19,9,10,11,12,7,8,6,7,8,7,7,8,6,7,8,7,7,8,6,7,6,7,8,7,7,8,0,0], 
    [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,10,11,9,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0], 
    [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,11,9,10,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0], 
    [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,11,9,10,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0], 
    [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,9,10,11,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0], 
    [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,10,11,9,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0], 
    [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,11,9,10,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0], 
    [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0], 
    [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0], 
    [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0], 
    [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0], 
    [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0], 
    [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0], 
    [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0], 
    [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0], 
    [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0], 
    [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0], 
    [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0], 
    [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0], 
    [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0], 
    [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0], 
    [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0], 
    [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0], 
    [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0], 
    [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0], 
    [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0], 
    [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0], 
    [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0], 
    [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0], 
    [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0], 
    [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0]],
     
     # furniture (trees, houses etc)

     [[-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1], 
    [-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1], 
    [-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1], 
    [-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1], 
    [-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1], 
    [-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1], 
    [-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1], 
    [-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,1,-1,0,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1], 
    [-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1], 
    [-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1], 
    [-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,8,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,8,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1], 
    [-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,8,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,15,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,8,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1], 
    [-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,8,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,14,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,8,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1], 
    [-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,8,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,13,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,8,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1], 
    [-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,8,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,12,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,8,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1], 
    [-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,8,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,9,10,11,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,8,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1], 
    [-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,8,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,4,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,8,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1], 
    [-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,8,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,8,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1], 
    [-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,8,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,8,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1], 
    [-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,8,8,8,8,8,8,8,8,8,8,8,8,8,-1,-1,-1,-1,-1,8,8,8,8,8,8,8,8,8,8,8,8,8,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1], 
    [-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,8,-1,-1,-1,-1,-1,8,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1], 
    [-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,8,-1,-1,-1,-1,-1,8,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1], 
    [-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,8,-1,-1,-1,-1,-1,8,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1], 
    [-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,8,-1,-1,-1,-1,-1,8,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1], 
    [-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,8,-1,-1,-1,-1,-1,8,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1], 
    [-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,8,-1,-1,-1,-1,-1,8,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1], 
    [-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,8,-1,-1,-1,-1,-1,8,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1], 
    [-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,8,-1,-1,-1,-1,-1,8,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1], 
    [-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,8,-1,-1,-1,-1,-1,8,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1], 
    [-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,8,-1,-1,-1,-1,-1,8,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1], 
    [-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1], 
    [-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1], 
    [-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1], 
    [-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1], 
    [-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1], 
    [-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1], 
    [-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1], 
    [-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1], 
    [-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1], 
    [-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1], 
    [-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1], 
    [-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1], 
    [-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1], 
    [-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1], 
    [-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1], 
    [-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1], 
    [-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1], 
    [-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1], 
    [-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1], 
    [-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1], 
    [-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1], 
    [-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1], 
    [-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1], 
    [-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1], 
    [-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1], 
    [-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1], 
    [-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1], 
    [-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1], 
    [-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1], 
    [-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1] 
],
     
     # walkable / clickable
    [
    [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0], 
    [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],
    [0,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,0],
    [0,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,0],
    [0,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,0],
    [0,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,0],
    [0,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,0],
    [0,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,1,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,0],
    [0,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,0],
    [0,0,1,1,1,1,1,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,1,1,1,1,1,0,0],
    [0,0,1,1,1,1,1,1,1,1,1,1,1,1,0,1,1,1,1,1,1,1,1,1,1,1,1,1,0,0,0,1,1,1,1,1,1,1,1,1,1,1,1,0,1,1,1,1,1,1,1,1,1,1,0,0],
    [0,0,1,1,1,1,1,1,1,1,1,1,1,1,0,1,1,1,1,1,1,1,1,1,1,1,1,1,0,0,0,1,1,1,1,1,1,1,1,1,1,1,1,0,1,1,1,1,1,1,1,1,1,1,0,0],
    [0,0,1,1,1,1,1,1,1,1,1,1,1,1,0,1,1,1,1,1,1,1,1,1,1,1,1,1,0,0,0,1,1,1,1,1,1,1,1,1,1,1,1,0,1,1,1,1,1,1,1,1,1,1,0,0],
    [0,0,1,1,1,1,1,1,1,1,1,1,1,1,0,1,1,1,1,1,1,1,1,1,1,1,1,1,0,0,0,1,1,1,1,1,1,1,1,1,1,1,1,0,1,1,1,1,1,1,1,1,1,1,0,0],
    [0,0,1,1,1,1,1,1,1,1,1,1,1,1,0,1,1,1,1,1,1,1,1,1,1,1,1,1,0,0,0,1,1,1,1,1,1,1,1,1,1,1,1,0,1,1,1,1,1,1,1,1,1,1,0,0],
    [0,0,1,1,1,1,1,1,1,1,1,1,1,1,0,1,1,1,1,1,1,1,1,1,1,1,1,1,0,10,0,1,1,1,1,1,1,1,1,1,1,1,1,0,1,1,1,1,1,1,1,1,1,1,0,0],
    [0,0,1,1,1,1,1,1,1,1,1,1,1,1,0,1,1,1,1,1,1,1,1,1,1,1,1,1,2,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,1,1,1,1,1,1,1,1,1,1,0,0],
    [0,0,1,1,1,1,1,1,1,1,1,1,1,1,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,1,1,1,1,1,1,1,1,1,1,0,0],
    [0,0,1,1,1,1,1,1,1,1,1,1,1,1,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,1,1,1,1,1,1,1,1,1,1,0,0],
    [0,0,1,1,1,1,1,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,1,1,1,1,1,0,0],
    [0,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,1,1,1,1,1,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,0],
    [0,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,1,1,1,1,1,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,0],
    [0,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,1,1,1,1,1,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,0],
    [0,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,1,1,1,1,1,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,0],
    [0,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,1,1,1,1,1,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,0],
    [0,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,1,1,1,1,1,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,0],
    [0,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,1,1,1,1,1,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,0],
    [0,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,1,1,1,1,1,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,0],
    [0,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,1,1,1,1,1,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,0],
    [0,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,1,1,1,1,1,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,0],
    [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],
    [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],
    [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],
    [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],
    [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],
    [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,12,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],
    [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],
    [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],
    [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],
    [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],
    [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],
    [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],
    [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],
    [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],
    [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],
    [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],
    [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],
    [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],
    [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],
    [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],
    [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],
    [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],
    [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],
    [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],
    [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],
    [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],
    [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],
    [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],
    [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],
    [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0]
                
    ]]

    pub_maps = [
    [
    # Background layer
    [21,21,21,21,21,21,21,21],
    [21,21,21,21,21,21,21,21],
    [21,21,21,21,21,21,21,21],
    [22,20,20,20,20,20,20,20],
    [22,20,20,20,20,20,20,20],
    [22,20,20,20,20,20,20,20],
    [22,20,20,20,20,20,20,20],
    [22,20,20,20,20,20,20,20],
    [22,20,20,20,20,20,20,20],
    [22,20,20,20,20,20,20,20],
    [22,20,20,20,20,20,20,20],
    [22,20,20,20,20,20,20,20]],

    # Furniture layer
    [[-1,-1,-1,-1,-1,-1,-1,-1],
    [-1,-1,-1,-1,-1,-1,-1,-1],
    [-1,-1,-1,-1,-1,-1,-1,-1],
    [-1,-1,-1,-1,-1,-1,-1,-1],
    [-1,-1,-1,-1,-1,-1,-1,-1],
    [-1,-1,-1,-1,-1,-1,-1,-1],
    [-1,-1,-1,-1,-1,-1,-1,-1],
    [-1,-1,-1,-1,-1,-1,-1,-1],
    [-1,-1,-1,-1,-1,-1,-1,-1],
    [-1,-1,-1,-1,-1,-1,-1,-1],
    [-1,-1,-1,-1,-1,-1,-1,-1],
    [-1,-1,-1,16,-1,-1,-1,-1]],


    # Walkable / clickable layer
    
    [[0,0,0,0,0,0,0,0],
    [0,0,0,0,0,0,0,0],
    [1,1,1,1,1,1,1,1],
    [1,1,1,1,1,1,1,1],
    [1,1,1,1,1,1,1,1],
    [1,1,1,1,1,1,1,1],
    [1,1,1,1,1,1,1,1],
    [1,1,1,1,1,1,1,1],
    [1,1,1,1,1,1,1,1],
    [1,1,1,1,1,1,1,1],
    [1,1,1,1,1,1,1,1],
    [1,1,1,11,1,1,1,1]]       
    ]

    forest_maps = [
    [
    # Background layer
    [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],
    [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],
    [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],
    [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],
    [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],
    [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],
    [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],
    [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],
    [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],
    [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],
    [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],
    [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],
    [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],
    [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],
    [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],
    [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],
    [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],
    [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],
    [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],
    [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0]],

    # Furniture layer
    [[8,8,8,8,8,8,8,-1,-1,-1,-1,8,8,8,8,8,8,8,8,8],
    [8,8,8,8,8,8,8,-1,-1,-1,-1,8,8,8,8,8,8,8,8,8],
    [8,8,8,8,8,8,8,-1,-1,-1,-1,8,8,8,8,8,8,8,8,8],
    [8,8,8,8,8,8,8,-1,-1,-1,-1,8,8,8,8,8,8,8,8,8],
    [8,8,8,8,8,8,8,-1,-1,-1,-1,8,8,8,8,8,8,8,8,8],
    [8,8,8,8,8,8,8,-1,-1,-1,8,8,8,8,8,-1,-1,-1,-1,8],
    [8,8,8,8,8,8,8,-1,-1,-1,8,8,8,8,8,-1,1,1,-1,8],
    [8,8,8,8,8,8,8,-1,-1,-1,8,8,8,8,8,-1,1,1,-1,8],
    [8,8,8,8,8,8,8,-1,-1,-1,8,8,8,8,8,8,8,8,8,8],
    [8,8,8,8,8,8,8,-1,-1,-1,8,8,8,8,8,-1,-1,-1,8,8],
    [8,8,8,8,8,8,8,-1,-1,-1,8,8,8,8,8,-1,-1,-1,8,8],
    [8,8,8,8,8,8,8,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,8,8],
    [8,8,8,8,8,8,8,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,8],
    [8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8],
    [8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8],
    [8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8],
    [8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8],
    [8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8],
    [8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8],
    [8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8]],


    # Walkable / clickable layer
    
    [[0,0,0,0,0,0,0,0,0,13,0,0,0,0,0,0,0,0,0,0],
    [0,0,0,0,0,0,0,0,1,1,1,0,0,0,0,0,0,0,0,0],
    [0,0,0,0,0,0,0,0,1,1,1,0,0,0,0,0,0,0,0,0],
    [0,0,0,0,0,0,0,0,1,1,1,0,0,0,0,0,0,0,0,0],
    [0,0,0,0,0,0,0,0,1,1,1,0,0,0,0,0,0,0,0,0],
    [0,0,0,0,0,0,0,0,1,1,1,0,0,0,0,1,1,1,1,0],
    [0,0,0,0,0,0,0,0,1,1,1,0,0,0,0,1,1,1,1,0],
    [0,0,0,0,0,0,0,0,1,1,1,0,0,0,0,1,1,1,1,0],
    [0,0,0,0,0,0,0,0,1,1,1,0,0,0,0,0,0,0,0,0],
    [0,0,0,0,0,0,0,0,1,1,1,0,0,0,0,1,1,1,0,0],
    [0,0,0,0,0,0,0,0,1,1,1,0,0,0,0,1,1,1,0,0],
    [0,0,0,0,0,0,0,0,1,1,1,1,1,1,1,1,1,1,0,0],
    [0,0,0,0,0,0,0,0,1,1,1,1,1,1,1,1,1,1,0,0],
    [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],
    [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],
    [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],
    [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],
    [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],
    [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],
    [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0]]       
    ]

    longgrass = Sprite(simplegui.load_image('https://dl.dropboxusercontent.com/u/58318455/Isometric/longgrass.png'), [64, 36], [0, 0],[0, 2])
    chestl = Sprite(simplegui.load_image('https://dl.dropboxusercontent.com/u/58318455/Isometric/chest-l-49x48.png'), [49, 48], [0, 0], [0, 10])
    chestr = Sprite(simplegui.load_image('https://dl.dropboxusercontent.com/u/58318455/Isometric/chest-r-49x48.png'), [49, 48], [0, 0], [0, 10])
    grass_pathne = Sprite(simplegui.load_image('https://dl.dropboxusercontent.com/u/58318455/Isometric/grass-pathne.png'), [64, 32])
    grass_pathnw = Sprite(simplegui.load_image('https://dl.dropboxusercontent.com/u/58318455/Isometric/grass-pathnw.png'), [64, 32])
    grass_pathse = Sprite(simplegui.load_image('https://dl.dropboxusercontent.com/u/58318455/Isometric/grass-pathse.png'), [64, 32])
    grass_pathsw = Sprite(simplegui.load_image('https://dl.dropboxusercontent.com/u/58318455/Isometric/grass-pathsw.png'), [64, 32])
    logl = Sprite(simplegui.load_image('https://dl.dropboxusercontent.com/u/58318455/Isometric/log-l-55x36.png'), [55, 36])
    logr = Sprite(simplegui.load_image('https://dl.dropboxusercontent.com/u/58318455/Isometric/log-r-55x36.png'), [55, 36])
    medgrass1 = Sprite(simplegui.load_image('https://dl.dropboxusercontent.com/u/58318455/Isometric/med-grass1.png'), [64, 32])
    medgrass2 = Sprite(simplegui.load_image('https://dl.dropboxusercontent.com/u/58318455/Isometric/med-grass2.png'), [64, 32])
    medgrasswind = Sprite(simplegui.load_image('https://dl.dropboxusercontent.com/u/58318455/Isometric/med-grass-wind.png'), [64, 32])
    path1 = Sprite(simplegui.load_image('https://dl.dropboxusercontent.com/u/58318455/Isometric/path1.png'), [64, 32])
    path2 = Sprite(simplegui.load_image('https://dl.dropboxusercontent.com/u/58318455/Isometric/path2.png'), [64, 32])
    path3 = Sprite(simplegui.load_image('https://dl.dropboxusercontent.com/u/58318455/Isometric/path3.png'), [64, 32])
    path_grasse = Sprite(simplegui.load_image('https://dl.dropboxusercontent.com/u/58318455/Isometric/path-grasse.png'), [64, 32])
    path_grassne = Sprite(simplegui.load_image('https://dl.dropboxusercontent.com/u/58318455/Isometric/path-grassne.png'), [64, 32])
    path_grassnw = Sprite(simplegui.load_image('https://dl.dropboxusercontent.com/u/58318455/Isometric/path-grassnw.png'), [64, 32])
    path_grassn = Sprite(simplegui.load_image('https://dl.dropboxusercontent.com/u/58318455/Isometric/path-grassn.png'), [64, 32])
    path_grasss = Sprite(simplegui.load_image('https://dl.dropboxusercontent.com/u/58318455/Isometric/path-grasss.png'), [64, 32])
    path_grassse = Sprite(simplegui.load_image('https://dl.dropboxusercontent.com/u/58318455/Isometric/path-grassse.png'), [64, 32])
    path_grasssw = Sprite(simplegui.load_image('https://dl.dropboxusercontent.com/u/58318455/Isometric/path-grasssw.png'), [64, 32])
    path_grassw = Sprite(simplegui.load_image('https://dl.dropboxusercontent.com/u/58318455/Isometric/path-grassw.png'), [64, 32])
    sign_small_r = Sprite(simplegui.load_image('https://dl.dropboxusercontent.com/u/58318455/Isometric/sign-small-r-23x42.png'), [23, 42], [0, 0], [0, 16])
    sign_big_r = Sprite(simplegui.load_image('https://dl.dropboxusercontent.com/u/58318455/Isometric/sign-big-l-35x65.png'), [35, 65], [0, 0], [0, 20])
    sign_big_l = Sprite(simplegui.load_image('https://dl.dropboxusercontent.com/u/58318455/Isometric/sign-big-r-35x65.png'), [35, 65], [0, 0], [0, 20])
    sign_small_r = Sprite(simplegui.load_image('https://dl.dropboxusercontent.com/u/58318455/Isometric/sign-small-l-23x42.png'), [23, 42], [0, 0], [0, 16])
    tree = Sprite(simplegui.load_image('https://dl.dropboxusercontent.com/u/58318455/Isometric/tree-70x116.png'), [70, 116], [0, 0], [0, 52])
    pub1 = Sprite(simplegui.load_image('https://dl.dropboxusercontent.com/u/58318455/Isometric/pub1%5B32%2C124%5D%5B16%2C%2046%5D.png'), [32, 124], [0, 0], [16, 46])
    pub2 = Sprite(simplegui.load_image('https://dl.dropboxusercontent.com/u/58318455/Isometric/pub2%5B32%2C172%5D%5B16%2C%2070%5D.png'), [32, 172], [0, 0], [16, 70])
    pub3 = Sprite(simplegui.load_image('https://dl.dropboxusercontent.com/u/58318455/Isometric/pub3%5B64%2C204%5D%5B0%2C86%5D.png'), [64, 204], [0, 0], [1,  86])
    pub4 = Sprite(simplegui.load_image('https://dl.dropboxusercontent.com/u/58318455/Isometric/pub4%5B32%2C204%5D%5B-16%2C46%5D.png'), [32, 204], [0, 0], [-15, 86])
    pub5 = Sprite(simplegui.load_image('https://dl.dropboxusercontent.com/u/58318455/Isometric/pub5%5B32%2C192%5D%5B-16%2C80%5D.png'), [32, 192], [0, 0], [-15, 82])
    pub6 = Sprite(simplegui.load_image('https://dl.dropboxusercontent.com/u/58318455/Isometric/pub6%5B32%2C168%5D%5B-16%2C68%5D.png'), [32, 168], [0, 0], [-15, 70])
    pub7 = Sprite(simplegui.load_image('https://dl.dropboxusercontent.com/u/58318455/Isometric/pub7%5B32%2C138%5D%5B-16%2C53%5D.png'), [32, 138], [0, 0], [-15, 53])
    inside_door = Sprite(simplegui.load_image('https://dl.dropboxusercontent.com/u/58318455/Isometric/inside_door.png'), [32, 172], [0, 0], [16, 20])
    stone_floor = Sprite(simplegui.load_image('https://dl.dropboxusercontent.com/u/58318455/Isometric/stone_floor.png'), [64, 32])
    brick_pave = Sprite(simplegui.load_image('https://dl.dropboxusercontent.com/u/58318455/Isometric/brick_pave.png'), [64, 32])
    crete_brick = Sprite(simplegui.load_image('https://dl.dropboxusercontent.com/u/58318455/Isometric/crete_brick.png'), [64, 32])
    
    #             0           1             2            3              4           5              6           7         8           9      10    11        12           13            14            15          16            17             18            19          20        21          22
    floors = [longgrass, grass_pathne, longgrass, grass_pathnw, grass_pathse, grass_pathsw, medgrass1, medgrass2, medgrasswind, path1, path2, path3, path_grasse, path_grassne, path_grassnw, path_grassn, path_grasss, path_grassse, path_grasssw, path_grassw, stone_floor, brick_pave, crete_brick]
    #              0        1     2      3       4              5         6             7          8    9      10   11     12    13   14    15      16
    furniture = [chestl, chestr, logl, logr, sign_small_r, sign_big_r, sign_big_l, sign_small_r, tree, pub1, pub2, pub3, pub4, pub5, pub6, pub7, inside_door]    
    
    #people = simplegui.load_image('https://dl.dropboxusercontent.com/u/58318455/Isometric/people.png')
    PC_image1 = simplegui.load_image('https://dl.dropboxusercontent.com/u/58318455/Isometric/clothes.png')
    PC_image2 = simplegui.load_image('https://dl.dropboxusercontent.com/u/58318455/Isometric/male_head1.png')
    NPC_heads= [simplegui.load_image('https://dl.dropboxusercontent.com/u/58318455/Isometric/male_head2.png'), simplegui.load_image('https://dl.dropboxusercontent.com/u/58318455/Isometric/male_head3.png')]
    NPC_bodies = [simplegui.load_image('https://dl.dropboxusercontent.com/u/58318455/Isometric/steel_armor.png'), simplegui.load_image('https://dl.dropboxusercontent.com/u/58318455/Isometric/leather_armor.png')]
    
    NPC_set = set()
    # variables
    
    scale = 2.6
    fpsdisplay = 0
    fps = 0
    current_music = 0 
    text1 = "After days of travel You come across a village in the middle of the forest"
    text2 = "A pall of smoke hangs thickly in the squalid tavern"
    text3 = "A miserable looking band glumly strum, while stale beer is served grudgingly"
    text4 = "This place is like a maze!"
    location = 'Village'
    doors = {10 : ['Pub', [3, 9]],
             11 : ['Village', [29, 16]],
             12 : ['Forest', [9, 1]],
             13 : ['Village', [29, 32]]}


    # sounds
    village_music = simplegui.load_sound('https://dl.dropboxusercontent.com/u/58318455/Isometric/village_music.mp3')
    pub_music = simplegui.load_sound('https://dl.dropboxusercontent.com/u/58318455/Isometric/pub_music.mp3')
    forest_music = simplegui.load_sound('https://dl.dropboxusercontent.com/u/58318455/Isometric/battle_coming.mp3')
    
    music = [village_music, pub_music, forest_music]




    def fpstimer_handler():
        Var.fpsdisplay = Var.fps
        Var.fps = 0

    def cart2iso(pos):
        return [pos[0] - pos[1], (pos[0] + pos[1]) / 2.0]
        
    def iso2cart(pos):
        return [(2.0 * pos[1] + pos[0]) / 2, (2.0 * pos[1] - pos[0]) / 2]

    def iso2screen(pos):
        campos = [pos[0] - Backdrop.camera[0], pos[1] - Backdrop.camera[1]] # camera corrected iso position
        return [Var.scale * (campos[0] * 32) + WIDTH / 2, Var.scale * (campos[1] * 32) + HEIGHT / 2]

    def screen2iso(pos):
        return [((pos[0] - WIDTH / 2.0) / Var.scale) / 32 + Backdrop.camera[0], ((pos[1] - HEIGHT / 2.0) / Var.scale) / 32 + Backdrop.camera[1]]

class Tile:
    size = [64, 32]


class NonPC:
    frame = 0
    image = 0
    def __init__(self, cart, box = [2, 2]):
        self.init_cart = cart[:]
        self.cart = cart
        self.pos = Var.iso2screen(Var.cart2iso(self.cart))
        self.size = [64, 64]
        self.centery = 76
        self.frame = NonPC.frame
        NonPC.frame += 2
        self.disp = 21
        self.center = [16, self.centery]
        self.direction = 0
        self.moving = 0
        self.box = box
        self.sprite1 = Sprite(Var.NPC_bodies[NonPC.image % 2], [64, 64], self.cart, [0, 16], [64 + 128 * (4 + ((self.frame / 8) % 4)) if self.moving else 4096 - 64, self.centery])
        self.sprite2 = Sprite(Var.NPC_heads[NonPC.image / 2], [64, 64], self.cart, [0, 16], [64 + 128 * (4 + ((self.frame / 8) % 4)) if self.moving else 4096 - 64, self.centery])
        NonPC.image += 1
        NonPC.image %= 4


    def update(self):
        self.frame += 1
        self.pos = Var.iso2screen(Var.cart2iso(self.cart))
        if self.direction == 0:
            self.centery = 76 + 6 * 128
        if self.direction == 1:
            self.centery = 76 + 4 * 128
        if self.direction == 2:
            self.centery = 76 
        if self.direction == 3:
            self.centery = 76 + 2 * 128

        self.center = [64 + 128 * (4 + ((self.frame / 8) % 4)) if self.moving else 4096 - 64, self.centery]
        if self.cart[0] >= self.init_cart[0] + self.box[0]:
            self.goW()
        elif self.cart[0] <= self.init_cart[0] - self.box[0]:
            self.goE()
        elif self.cart[1] >= self.init_cart[1] + self.box[1]:
            self.goS()
        elif self.cart[1] <= self.init_cart[1] - 2:
            self.goN()        
        
        if self.moving == 1:

            if random.randrange(50) == 0:
                self.moving = 0
            else:
                if self.direction == 0: self.goS()
                if self.direction == 1: self.goE()
                if self.direction == 2: self.goW()
                if self.direction == 3: self.goN()
        
        else:
            if random.randrange(50) == 0:
                x = random.randrange(4)
                if x == 1: self.goN()
                if x == 0: self.goE()
                if x == 2: self.goS()
                if x == 3: self.goW()

    def goS(self):
        self.direction = 0
        self.cart[1] += 0.01
        self.moving = 1

    def goE(self):
        self.direction = 1
        self.cart[0] += 0.01
        self.moving = 1

    def goW(self):
        self.direction = 2
        self.cart[0] -= 0.01
        self.moving = 1

    def goN(self):
        self.direction = 3
        self.cart[1] -= 0.01
        self.moving = 1



class Backdrop:
    camera = Var.cart2iso([29.0, 32.0])
    def __init__(self):
        self.map1 = []
        self.map2 = []
        self.map3 = []
        self.size = []
        self.village()

    def village(self):
        self.size = [len(Var.village_maps[0][0]), len(Var.village_maps[0])]
        Var.location = 'Village'
        text_box_list.append(TextBox(200, [150, 100], Var.location, 'White', 'Green', Color(0,0,0,0.5)))
        Var.music[Var.current_music].pause()
        Var.music[Var.current_music].rewind()
        Var.music[0].play()
        Var.current_music = 0
        self.map1 = Var.village_maps[0]
        self.map2 = Var.village_maps[1]
        self.map3 = Var.village_maps[2]
        assert len(self.map1[0]) == len(self.map2[0]) == len(self.map3[0])
        assert len(self.map1) == len(self.map2) == len(self.map3)
        Var.NPC_set.add(NonPC([29.0, 29.0]))
        #Var.NPC_set.add(NonPC(1, [18.0, 12.0]))
        #Var.NPC_set.add(NonPC(4, [20.0, 14.0]))
        #Var.NPC_set.add(NonPC(9, [22.0, 12.0]))



    def pub(self):
        self.size = [len(Var.pub_maps[0][0]), len(Var.pub_maps[0])]
        Var.location = 'Pub'
        text_box_list.append(TextBox(200, [150, 100], Var.location, 'White', 'Gray', Color(0,0,0,0.5)))
        Var.music[Var.current_music].pause()
        Var.music[Var.current_music].rewind()
        Var.music[1].play()
        Var.current_music = 1
        self.map1 = Var.pub_maps[0]
        self.map2 = Var.pub_maps[1]
        self.map3 = Var.pub_maps[2]
        assert len(self.map1[0]) == len(self.map2[0]) == len(self.map3[0])
        assert len(self.map1) == len(self.map2) == len(self.map3)
        text_box_list.append(TextBox(400, [WIDTH / 2, HEIGHT / 2], Var.text2, Color(255, 255, 255), Color(0, 128, 255), Color(0, 0, 0)))
        text_box_list.append(TextBox(400, [WIDTH / 2, HEIGHT / 2], Var.text3, Color(255, 255, 255), Color(0, 128, 255), Color(0, 0, 0)))
        NPC_set = set([NonPC([3, 4])])
         
    def forest(self):
        self.tiles = []
        self.size = [len(Var.forest_maps[0][0]), len(Var.forest_maps[0])]
        Var.location = 'Forest'
        text_box_list.append(TextBox(200, [150, 100], Var.location, 'White', 'Green', Color(0,0,0,0.5)))
        Var.music[Var.current_music].pause()
        Var.music[Var.current_music].rewind()
        Var.music[2].play()
        Var.current_music = 2
        self.map1 = Var.forest_maps[0]
        self.map2 = Var.forest_maps[1]
        self.map3 = Var.forest_maps[2]
        assert len(self.map1[0]) == len(self.map2[0]) == len(self.map3[0])
        assert len(self.map1) == len(self.map2) == len(self.map3)
        text_box_list.append(TextBox(400, [WIDTH / 2, HEIGHT / 2], Var.text4, Color(255, 255, 255), Color(0, 128, 255), Color(0, 0, 0)))
        NPC_set = set()


            
    def warp(self, cart):
        if cart in Var.doors[Var.location]:
            if Var.doors[Var.location][tuple(cart)][0] == 'Village':
                self.village(Var.doors[Var.location][cart][1])
            elif Var.doors[Var.location][tuple(cart)][0] == 'Pub':
                self.pub(Var.doors[Var.location][cart][1])








    def draw(self, canvas):
        drawlist = Program.player.sprites[:]
        for npc in Var.NPC_set:
            drawlist.append(npc.sprite1)
            drawlist.append(npc.sprite2)


        topleft = Var.iso2cart(Var.screen2iso([-50, -100]))
        xrangelow = max(0, int(topleft[0]))
        topright = Var.iso2cart(Var.screen2iso([WIDTH + 50, -100]))
        yrangelow = max(0, int(topright[1]))
        bottomright = Var.iso2cart(Var.screen2iso([WIDTH, HEIGHT]))
        xrangehi = min(self.size[0] - 2, 1 + int(bottomright[0]))
        bottomleft = Var.iso2cart(Var.screen2iso([-50, HEIGHT]))
        yrangehi = min(self.size[1] - 2, 1 + int(bottomleft[1]))
        center = Var.iso2cart(Var.screen2iso([WIDTH / 2, HEIGHT / 2]))

        topleft = Var.iso2cart(Var.screen2iso([-Tile.size[0] / 2, -Tile.size[1] / 2]))
        bottomright = Var.iso2cart(Var.screen2iso([WIDTH + Tile.size[0] / 2, HEIGHT + Tile.size[1] / 2]))
        start = int(topleft[1] * self.size[0] + topleft[0])
        stop = int(bottomright[1] * self.size[0] + bottomright[0])
        player_cart = Var.iso2cart(Program.player.pos)
        icart = [round(player_cart[0]), round(player_cart[1])]
        #print icart, (xrangelow, xrangehi), (yrangelow, yrangehi)
        for y in range(yrangelow, yrangehi + 1):
            for x in range(xrangelow, xrangehi + 1):
                if math.sqrt((x - center[0]) ** 2 + (y - center[1]) ** 2) < 9 and abs(abs(x - center[0]) - abs(y - center[1])) < 9:
                    scpos = Var.iso2screen(Var.cart2iso([x, y]))
                    if scpos[0] > Var.scale * -Tile.size[0] / 2 and scpos[0] < Var.scale * WIDTH + Tile.size[0] / 2 and scpos[1] > Var.scale * -Tile.size[1] / 2 and scpos[1] < Var.scale * WIDTH + Tile.size[1] / 2:
                        Var.floors[self.map1[y][x]].draw(canvas, scpos)
                        
                    if self.map2[y][x] != -1:
                       drawlist.append(Sprite(Var.furniture[self.map2[y][x]].image, Var.furniture[self.map2[y][x]].size, [x, y], Var.furniture[self.map2[y][x]].displacement))

        
        drawlist.sort()
        for sprite in drawlist:
            scpos = Var.iso2screen(Var.cart2iso(sprite.cart))
            sprite.draw(canvas, scpos)   
                       
        

class Quest:
    pass

class Player:
    def __init__(self):
        self.pos = Backdrop.camera[:]
        self.iso = self.pos
        self.moving = [0, 0]
        self.speed = 0.03
        self.img1 = Var.PC_image1
        self.img2 = Var.PC_image2
        self.size = [64, 64]
        self.centerx = [39, 117, 195, 273]
        self.centery = 956
        self.frame = 0
        self.destinationSet = False
        self.destination = [0, 0]
        self.hp = 10
        self.max_hp = 100
        self.mp = 0
        self.max_mp = 20
        cart = Var.iso2cart(self.pos)
        self.sprites = [Sprite(self.img1, [64, 64], cart, [0, 32], [64 + 128 * (4 + ((self.frame / 8) % 4)) if self.destinationSet else 4096 - 64, self.centery]), Sprite(self.img2, [64, 64], cart, [0, 32], [64 + 128 * (4 + ((self.frame / 8) % 4)) if self.destinationSet else 4096 - 64, self.centery])]

    def __cmp__(self, other):
        '''
        comparator: used to fix z order from back to front
        '''
        return self.iso[1] - other.iso[1]

    def update(self):
        self.frame += 1
        Backdrop.camera = self.pos[:]
        cart = Var.iso2cart(self.pos)
        if self.destinationSet:
            
            if abs(self.pos[0] - self.destination[0]) <= 0.1 and abs(self.pos[1] - self.destination[1]) <= 0.1:
                self.destinationSet = False 
            # down right
            elif self.pos[0] < self.destination[0] - 0.07 and self.pos[1] < self.destination[1] - 0.035:
                next_step = [self.pos[0] + 0.14, self.pos[1] + 0.07]
                icart = [round(Var.iso2cart(next_step)[0]), round(Var.iso2cart(next_step)[1])]
                if Program.back.map3[icart[1]][icart[0]] != 0:
                    self.pos[0] += 0.07
                    self.pos[1] += 0.035
                    self.centery = 5 * 128 + 78
                else:
                    self.destinationSet = False
            # down left
            elif self.pos[0] > self.destination[0] + 0.07 and self.pos[1] < self.destination[1] - 0.035:
                next_step = [self.pos[0] - 0.14, self.pos[1] + 0.07]
                icart = [round(Var.iso2cart(next_step)[0]), round(Var.iso2cart(next_step)[1])]
                if Program.back.map3[icart[1]][icart[0]] != 0:
                    self.pos[0] -= 0.07
                    self.pos[1] += 0.035
                    self.centery = 7 * 128 + 78
                else:
                    self.destinationSet = False
            # up left
            elif self.pos[0] > self.destination[0] + 0.07 and self.pos[1] > self.destination[1] + 0.035:
                next_step = [self.pos[0] - 0.14, self.pos[1] - 0.07]
                icart = [round(Var.iso2cart(next_step)[0]), round(Var.iso2cart(next_step)[1])]
                if Program.back.map3[icart[1]][icart[0]] != 0:
                    self.pos[0] -= 0.07
                    self.pos[1] -= 0.035
                    self.centery = 128 + 78
                else:
                    self.destinationSet = False
            # up right
            elif self.pos[0] < self.destination[0] - 0.07 and self.pos[1] > self.destination[1] + 0.035:
                next_step = [self.pos[0] + 0.14, self.pos[1] - 0.07]
                icart = [round(Var.iso2cart(next_step)[0]), round(Var.iso2cart(next_step)[1])]
                if Program.back.map3[icart[1]][icart[0]] != 0:
                    self.pos[0] += 0.07
                    self.pos[1] -= 0.035
                    self.centery = 3 * 128 + 78     
                else:
                    self.destinationSet = False
            # right
            elif self.pos[0] < self.destination[0] - 0.07:
                next_step = [self.pos[0] + 0.14, self.pos[1]]
                icart = [round(Var.iso2cart(next_step)[0]), round(Var.iso2cart(next_step)[1])]
                if Program.back.map3[icart[1]][icart[0]] != 0:
                    self.pos[0] += 0.07
                    self.centery = 4 * 128 + 78
                else:
                    self.destinationSet = False
            # left
            elif self.pos[0] > self.destination[0] + 0.07: 
                next_step = [self.pos[0] - 0.14, self.pos[1]]
                icart = [round(Var.iso2cart(next_step)[0]), round(Var.iso2cart(next_step)[1])]
                if Program.back.map3[icart[1]][icart[0]] != 0:
                    self.pos[0] -= 0.07
                    self.centery = 78
                else:
                    self.destinationSet = False
            # down
            elif self.pos[1] < self.destination[1] - 0.07:
                next_step = [self.pos[0], self.pos[1] + 0.14]
                icart = [round(Var.iso2cart(next_step)[0]), round(Var.iso2cart(next_step)[1])]
                if Program.back.map3[icart[1]][icart[0]] != 0:
                    self.pos[1] += 0.07
                    self.centery = 6 * 128 + 78
                else:
                    self.destinationSet = False
            # up
            elif self.pos[1] > self.destination[1] + 0.07:
                next_step = [self.pos[0], self.pos[1] + 0.14]
                icart = [round(Var.iso2cart(next_step)[0]), round(Var.iso2cart(next_step)[1])]
                if Program.back.map3[icart[1]][icart[0]] != 0:
                    self.pos[1] -= 0.07
                    self.centery = 2 * 128 + 78
                else:
                    self.destinationSet = False
            
            walkable = Program.back.map3[round(cart[1])][round(cart[0])]
           
            # Door test
            if walkable >= 10:  
                if Var.doors[walkable][0] == 'Village':
                    Backdrop.camera = Var.doors[walkable][1][:]
                    self.destination = Program.player.pos = Var.cart2iso(Var.doors[walkable][1])
                    self.destinationSet = False
                    Program.back.village()
                elif Var.doors[walkable][0] == 'Pub':
                    Backdrop.camera = Var.doors[walkable][1][:]
                    self.destination = Program.player.pos = Var.cart2iso(Var.doors[walkable][1])
                    self.destinationSet = False
                    Program.back.pub()
                elif Var.doors[walkable][0] == 'Forest':
                    Backdrop.camera = Var.doors[walkable][1][:]
                    self.destination = Program.player.pos = Var.cart2iso(Var.doors[walkable][1])
                    self.destinationSet = False
                    Program.back.forest()
            ## draw player using Sprtie
            for sprite in self.sprites:
               sprite.cart = cart
               sprite.center = [64 + 128 * (4 + ((self.frame / 8) % 4)) if self.destinationSet else 4096 - 64, self.centery]
            

    def draw(self, canvas):
        canvas.draw_image(self.img1, [64 + 128 * (4 + ((self.frame / 8) % 4)) if self.destinationSet else 4096 - 64, self.centery], self.size, [Program.width / 2, Program.height / 2 - self.size[1] / 2], [self.size[0] * Var.scale, self.size[1] * Var.scale])
        canvas.draw_image(self.img2, [64 + 128 * (4 + ((self.frame / 8) % 4)) if self.destinationSet else 4096 - 64, self.centery], self.size, [Program.width / 2, Program.height / 2 - self.size[1] / 2], [self.size[0] * Var.scale, self.size[1] * Var.scale])
        if self.destinationSet:
            mark = Var.iso2screen(self.destination)
            msize = 5 + (self.frame / 2) % 8
            canvas.draw_line([mark[0] - msize, mark[1]], [mark[0] + msize, mark[1]], 4, 'Red')
            canvas.draw_line([mark[0], mark[1] - msize], [mark[0], mark[1] + msize], 4, 'Red')

class Enemy:
    def __init__(self, pos, sprite):
        self.pos = pos
        self.sprite = sprite

    def update(self):
        pass

    def draw(self, canvas):
        self.sprite.draw(self.pos)

class FadingText:
    def __init__(self, textList, pos, box, color, font = 'sans-serif', fade_in_time = 60, on_screen = -1, fade_out_time = 60):
        '''
        text - str - the text to display
        pos - list or tuple - the co-ords of the top left of a box around the text
        box - list or tuple - the size of a box that the text fits in
        color - str or Color object - the color of the text when fully displayed
        font - str - the font
        fade_in_time - the number of frames to fade in for
        fade_out_time - the number of frames to fade out for
        '''
        self.line = 0
        self.textList = textList
        self.size = 1
        self.box = box
        self.pos = pos
        self.draw_place = [0, 0]
        self.color = color
        self.font = font
        self.fade_in = fade_in_time
        self.fade_out = fade_out_time
        self.frame = 0
        if on_screen == -1:
            self.on_screen = len(self.textList[self.line]) * 3 
        else:
            self.on_screen = on_screen
        self.done = False

    def update(self):
        if self.done == False:
            if self.frame == 0:
                for size in range(200):
                    if program.frame.get_canvas_textwidth(self.textList[self.line], 200 - size, self.font) <= self.box[0]:
                        self.size = 200 - size
                        break
                self.draw_place = [self.pos[0], self.pos[1] + self.box[1] / 2 + self.size * 0.6 / 2]
                self.on_screen = len(self.textList[self.line]) * 3 
            if self.frame < self.fade_in:
                self.color.a = float(self.frame) / self.fade_in
            elif self.frame < self.fade_in + self.on_screen:
                self.color.a = 1
            else:
                self.color.a = (self.fade_out - (self.frame - self.fade_in - self.on_screen)) / float(self.fade_out)
            if self.frame >= self.fade_in + self.on_screen + self.fade_out:
                if self.line == len(self.textList) - 1:
                    self.done = True
                else:
                    self.line += 1
                    self.frame = -1
            self.frame += 1
            
    def draw(self, canvas):
        canvas.draw_text(self.textList[self.line], self.draw_place, self.size, self.color.output(), self.font) 

class Program:
    width = WIDTH
    height = HEIGHT
    back = Backdrop()
    player = Player()
    text_box_list = [TextBox(400, [WIDTH / 2, HEIGHT / 2], Var.text1, 'White', 'Red', 'Black')]
    
    def __init__(self):
        self.frame = simplegui.create_frame("Home", 700, 600)
        self.frame.set_draw_handler(self.isoGame)
        self.frame.set_mouseclick_handler(Program.clicker)
        self.frame.set_mousedrag_handler(Program.dragger)

        self.frame.set_canvas_background('Black')
        self.box = [400, 200]
        self.pos = [200, 200]
        self.text = FadingText(narrative, self.pos, self.box, Color(255,255,255))
        self.frame.start()
        
        
    def clicker(pos):
        if text_box_list:
            text_box_list[0].active = False
        elif pos[1] < HEIGHT:
            cart = Var.iso2cart(Var.screen2iso(pos))
            icart = [round(cart[0]), round(cart[1])]
            if len(Program.back.map3[0]) > round(cart[0]) > 0 and len(Program.back.map3) > round(cart[1]) > 0:
                if Program.back.map3[round(cart[1])][round(cart[0])] == 2:
                    text_box_list.append(TextBox(400, [WIDTH / 2, HEIGHT / 2], 'Ye Olde Pube', 'Yellow', 'Brown', 'Black'))
                elif Program.back.map3[round(cart[1])][round(cart[0])] != 0:
                    Program.player.destinationSet = True
                    Program.player.destination = Var.screen2iso(pos) 

    def dragger(pos):
        if HEIGHT + 10 < pos[1] < HEIGHT + 90 and WIDTH - 10 > pos[0] > WIDTH - 30:
            Var.scale = 1.0 + (pos[1] - (HEIGHT + 10)) / 20.0 # invers 20 * (Var.scale - 1) + HEIGHT - 90
       
    def draw(self, canvas):
        self.text.update()
        self.text.draw(canvas)
        
        if self.text.done:
            self.frame.set_draw_handler(self.isoGame)
        
        
    def isoGame(self, canvas):
        # update (move) player
        Program.player.update()

        # draw background and player
        Program.back.draw(canvas)

        # update NPCs
        for npc in Var.NPC_set:
            npc.update()
            #npc.draw(canvas)


        # draw interface
        
        canvas.draw_polyline([[5, 5], [WIDTH - 5, 5], [WIDTH - 5, HEIGHT - 5], [5, HEIGHT - 5], [5, 0]], 10, 'Brown')
        canvas.draw_polygon([[0, HEIGHT], [WIDTH, HEIGHT], [WIDTH, HEIGHT + 100], [0, HEIGHT + 100]], 1, 'Black', 'Black')
        canvas.draw_text('HP: ' + str(Program.player.hp) + ' / ' + str(Program.player.max_hp), [5, HEIGHT + 35], 25, Color(254, 0, 0).output(), 'sans-serif')
        canvas.draw_text('MP: ' + str(Program.player.mp) + ' / ' + str(Program.player.max_mp), [5, HEIGHT + 70], 25, Color(125, 249, 255).output(), 'sans-serif')
        # slider
        canvas.draw_polygon([[WIDTH - 30, HEIGHT + 90], [WIDTH - 10, HEIGHT + 90], [WIDTH - 10, HEIGHT + 10], [WIDTH - 30, HEIGHT + 10]], 1, 'White', 'White')
        canvas.draw_line([WIDTH - 30, 20 * (Var.scale - 1) + HEIGHT + 10], [WIDTH - 10, 20 * (Var.scale - 1) + HEIGHT + 10], 5, 'Red')

        
        # FPS Counter
        Var.fps += 1
        canvas.draw_text(str(Var.fpsdisplay), [5, 25], 25, 'White', 'sans-serif') 
        
        # Draw the first of any text boxes on the queue
        if text_box_list:
            text_box_list[0].draw(canvas)
        
        # loop music
        Var.music[Var.current_music].play()

fpstimer = simplegui.create_timer(1000, Var.fpstimer_handler)
fpstimer.start()
text_box_list.append(TextBox(400, [WIDTH / 2, HEIGHT / 2], Var.text1, Color(255, 255, 255), Color(255, 128, 0), Color(0, 0, 0)))
program = Program()
